package day14;

public class ACDTest {
    public static void main(String[] args) {

        // 创建Animal对象
        Animal animal = new Animal("莱因哈特", 5);
        System.out.println(animal.toString());
        animal.eat();
        animal.sleep();
        System.out.println();
        
        // 创建Dog对象
        Dog dog = new Dog("半藏", 3, "罗威纳");
        System.out.println(dog.toString());
        dog.eat(); // 调用重写的方法
        dog.sleep(); // 调用继承的方法
        dog.bark(); // 调用子类特有方法
        dog.fetch(); // 调用子类特有方法
        System.out.println();
        
        // 创建Cat对象
        Cat cat = new Cat("天使", 2, true);
        System.out.println(cat.toString());
        cat.eat(); // 调用重写的方法
        cat.sleep(); // 调用继承的方法
        cat.meow(); // 调用子类特有方法
        cat.climb(); // 调用子类特有方法
        System.out.println();
        
        // 演示多态性
        System.out.println("******** 演示多态性 ********");
        Animal animal1 = new Dog("探奇", 4, "拉布拉多");
        Animal animal2 = new Cat("黑影", 1, false);
        
        // 调用各自重写的方法
        animal1.eat(); // 调用Dog的eat方法
        animal2.eat(); // 调用Cat的eat方法
        
        // 类型转换
        if (animal1 instanceof Dog) {
            Dog d = (Dog) animal1;
            d.bark();
        }
        
        if (animal2 instanceof Cat) {
            Cat c = (Cat) animal2;
            c.meow();
        }
    }
}